package net.zdreamer.shunyi.utils;

import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;

import net.zdreamer.shunyi.utils.ListUtils.FastBlur;

import java.io.IOException;
import java.io.InputStream;

public class ImageUtil {
	 private static final int STROKE_WIDTH = 4;
	//从assets资源中获取图片
		public static Bitmap getBitmap(Context context,String filename){
			
		
				Bitmap image = null;
				AssetManager am = context.getResources().getAssets();
				try {

					InputStream is = am.open(filename);
					image = BitmapFactory.decodeStream(is);
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				return image;
			}

    /**
     * 图片强制转换圆形
     * @param context
     * @param res
     * @return
     */
	public static  Bitmap toRoundBitmap(Context context,int res) {
		// Bitmap bitmap= getBitmap(context, filename);
        Bitmap bitmap=BitmapFactory.decodeResource(context.getResources(), res);
		 int width = bitmap.getWidth();
		 int height = bitmap.getHeight();
		 float roundPx;
	     float left,top,right,bottom,dst_left,dst_top,dst_right,dst_bottom;
		 if (width <= height) {
		      roundPx = width / 2;
		      top = 0;
		      left = 0;
		      bottom = width;
	          right = width;
	          height = width;
		      dst_left = 0;
		      dst_top = 0;
		      dst_right = width;
		      dst_bottom = width;
		  } else {
		      roundPx = height / 2;
	          float clip = (width - height) / 2;
		      left = clip;
		      right = width - clip;
		      top = 0;
		      bottom = height;
			  width = height;
			  dst_left = 0;
			  dst_top = 0;
			  dst_right = height;
			  dst_bottom = height;
	     }

	        Bitmap output = Bitmap.createBitmap(width,
			height, Config.ARGB_8888);
			Canvas canvas = new Canvas(output);
			
		    final int color = 0xff424242;
			final Paint paint = new Paint();
			final Rect src = new Rect((int)left, (int)top, (int)right, (int)bottom);
		    final Rect dst = new Rect((int)dst_left, (int)dst_top, (int)dst_right, (int)dst_bottom);
			final RectF rectF = new RectF(dst);

			paint.setAntiAlias(true);

	        canvas.drawARGB(0, 0, 0, 0);
		    paint.setColor(Color.WHITE);
		    paint.setStrokeWidth(4); 
	        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
	        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
		    canvas.drawBitmap(bitmap, src, dst, paint);
		    
		    //画白色圆圈
		    paint.reset();
		    paint.setColor(Color.WHITE);
		    paint.setStyle(Paint.Style.STROKE);
		    paint.setStrokeWidth(STROKE_WIDTH);
		    paint.setAntiAlias(true);
	        canvas.drawCircle(width / 2, width / 2, width / 2 - STROKE_WIDTH / 2, paint);
	        return output ; 
		}

    /**
     * 图片模糊效果
     * @param context
     * @param view1
     * @param view2
     */
    public static void appBlur(final Context context,final View view1, final View view2) {
        view1.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

            @Override
            public boolean onPreDraw() {
                view1.getViewTreeObserver().removeOnPreDrawListener(this);
                view1.buildDrawingCache();

                Bitmap bmp = view1.getDrawingCache();
                blur(bmp, view2,context);
                return true;
            }
        });
    }


    public static   void blur(Bitmap bkg, View view,Context context) {
        long startMs = System.currentTimeMillis();
        float scaleFactor = 1;
        float radius = 20;
        Bitmap overlay = Bitmap.createBitmap((int) (view.getMeasuredWidth()),
                (int) (view.getMeasuredHeight()), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(overlay);
        canvas.translate(-view.getLeft(), -view.getTop());
        canvas.scale(1 / scaleFactor, 1 / scaleFactor);
        Paint paint = new Paint();
        paint.setFlags(Paint.FILTER_BITMAP_FLAG);
        canvas.drawBitmap(bkg, 0, 0, paint);
        overlay = FastBlur.doBlur(overlay, (int) radius, true);
        view.setBackgroundDrawable(new BitmapDrawable(context.getResources(), overlay));
        Log.e("", System.currentTimeMillis() - startMs + "ms");
    }
}
